Interpreted languages are widely used to make computer programs portable across diverse hardware platforms. The same interpreted language program can be easily moved from one type of computer to another; only the runtime environment which performs the interpretation must be tailored specifically to the underlying hardware.
This benefit of an interpreted language is also its greatest drawback. A program written in an interpreted language executes significantly slower than the same program written in a compiled language on the same computer. Previous solutions to the problem all contain major flaws.
For example, native code compilers have been implemented which convert the instructions of the interpreted language into equivalent instructions in a language native to the specific hardware. The native code program is then executed. However, because the compiled native code program does not execute in the interpretive runtime environment, any functions provided by the runtime environment are unavailable to the program. Such a program is also frequently much larger than the interpreted language program, resulting in resource issues on minimally configured computers.
Another approach taken was to convert the interpreted language program, as a whole, into a program in a compiled language which accomplishes the same functions. Such efforts have proved highly complex to implement and result in inefficient compiled code.
Therefore, what is needed is a way to increase the performance of an interpreted language program while providing access to the functions of the corresponding runtime environment, and to do so in a fashion that converses system resources.